import http from '../http';
import { handleResponse } from '../utils';

// 用户相关接口
export default {
  /**
   * 用户登录
   * @param {Object} data 登录信息
   * @returns {Promise}
   */
  login(data) {
    return new Promise((resolve, reject) => {
      http.post('/user/login', data)
        .then(res => {
          if (res.data.code === 200) {
            // 登录成功，保存用户信息和token
            const { token, userInfo } = res.data.data;
            uni.setStorageSync('token', token);
            uni.setStorageSync('userInfo', userInfo);
            resolve(res.data.data);
          } else {
            reject(res.data);
          }
        })
        .catch(error => {
          reject(error);
        });
    });
  },
  
  /**
   * 用户注册
   * @param {Object} data 注册信息
   * @returns {Promise}
   */
  register(data) {
    return handleResponse(
      http.post('/user/register', data),
      '注册成功',
      '注册失败'
    );
  },
  
  /**
   * 获取用户信息
   * @returns {Promise}
   */
  getUserInfo() {
    return new Promise((resolve, reject) => {
      http.get('/user/info')
        .then(res => {
          if (res.data.code === 200) {
            resolve(res.data.data);
          } else {
            reject(res.data);
          }
        })
        .catch(error => {
          reject(error);
        });
    });
  },
  
  /**
   * 更新用户信息
   * @param {Object} data 用户信息
   * @returns {Promise}
   */
  updateUserInfo(data) {
    return handleResponse(
      http.put('/user/update', data),
      '更新成功',
      '更新失败'
    );
  },
  
  /**
   * 修改密码
   * @param {Object} data 密码信息
   * @returns {Promise}
   */
  changePassword(data) {
    return new Promise((resolve, reject) => {
      http.put('/user/password', data)
        .then(res => {
          if (res.data.code === 200) {
            resolve(res.data.data);
          } else {
            uni.showToast({
              title: res.data.msg || '修改密码失败',
              icon: 'none'
            });
            reject(res.data);
          }
        })
        .catch(error => {
          reject(error);
        });
    });
  },
  
  /**
   * 退出登录
   * @returns {Promise}
   */
  logout() {
    return new Promise((resolve) => {
      // 清除本地存储的用户信息和token
      uni.removeStorageSync('token');
      uni.removeStorageSync('userInfo');
      resolve();
    });
  },
  
  /**
   * 上传用户头像
   * @param {String} filePath 文件路径
   * @returns {Promise}
   */
  uploadAvatar(filePath) {
    return new Promise((resolve, reject) => {
      const userInfo = uni.getStorageSync('userInfo');
      if (!userInfo || !userInfo.id) {
        return reject(new Error('用户未登录或用户ID不存在'));
      }
      
      uni.uploadFile({
        url: http.baseUrl + '/user/avatar/upload',
        filePath: filePath,
        name: 'file',
        formData: {
          userId: userInfo.id
        },
        header: {
          'token': uni.getStorageSync('token')
        },
        success: (uploadRes) => {
          const result = JSON.parse(uploadRes.data);
          if (result.code === 200) {
            resolve({ url: result.data });
          } else {
            reject(result);
          }
        },
        fail: (err) => {
          console.error('上传失败:', err);
          reject(err);
        }
      });
    });
  },
  
  /**
   * 获取积分排行榜
   * @param {Number} limit 返回的用户数量
   * @returns {Promise}
   */
  getPointsRanking(limit = 10) {
    return handleResponse(
      http.get(`/user/rank/points?limit=${limit}`),
      '',
      '获取排行榜失败'
    );
  }
}
